Transmission Control Protocol (TCP) is a transport protocol widely used in the Internet. It is a protocol between two hosts, such as a TCP source and a TCP receiver, providing (1) error recovery, and (2) congestion control. The error recovery is provided by an acknowledgment scheme. Acknowledgments (ACKs) are sent by the TCP receiver to the TCP source, and confirm the arrival of a packet at the TCP receiver. Congestion control is provided via a window scheme. In essence, the TCP source is allowed to send a number of packets equal to the “congestion window” size (called “cwin” in the TCP standard). The TCP source then stops and waits for ACKs before resuming transmission. When the value of cwin is high, the TCP source manages to transmit several packets before feedback from the TCP receiver. When cwin is low, the opposite is true. Thus, cwin can be used for congestion control. The TCP source keeps increasing the TCP source's cwin value and thus, the TCP source's sending rate, as long as the TCP source perceives that the network is not congested. The TCP source reduces cwin, on the other hand, when the TCP source senses that network congestion is building up.
Congestion is detected from packet loss. In the current standard TCP, two indications of packet loss are taken into consideration: (1) The reception of 3 duplicate ACKs, and (2) The expiration of a time interval (Timeout) after a packet transmission, without receiving any feedback from the TCP receiver. The first indication is considered “soft loss” since the path from TCP source to TCP receiver appears to be still in operation, even after packet loss. The second indication is considered more serious since the TCP source has no indication that anything has been delivered to the TCP receiver after packet loss. The current design for TCP congestion control assumes that every packet loss is because of congestion in the network. This assumption is justified in a network with optical fiber links where losses on the link because of link errors are extremely rare. However, when some of the links are not optical, and particularly when some links are wireless, error rates are significant, and packets can be lost because of congestion or because of error on transmission links.
After three (3) duplicate ACKs are received at the TCP source, in one TCP protocol (named New Reno) cwin is reset to half its current value. If the Timeout expires, cwin is reset to 1. That is the TCP source can only send one packet and then has to wait for a feedback from the TCP receiver.
In addition to cwin, another congestion control parameter in TCP is the so-called Slow Start Threshold, or ssthresh. This parameter is also used in setting the sending rate of the TCP source. In particular, ssthresh controls the rate of increase of the sending rate when feedback from the TCP receiver is positive. Ssthresh does have significant impact on network congestion control. If the threshold indicates that the rate of increase of cwin should be high, a TCP source can increase its sending rate at a high rate possibly inducing congestion. Thus setting ssthresh properly is desired for proper congestion avoidance.